//
// Created by YueChuan on 2023/5/5.
//

#ifndef YUECHUAN_JSON_UTIL_H
#define YUECHUAN_JSON_UTIL_H

#include<string>
#include<iostream>
#include <json/json.h>
namespace yuechuan {
    class JsonUtil {
    public:
        /**
         * @brief 是否需要跳过，包含\f、\r、\b、\n、\t、\\、都需要返回true
         * @param v
         * @return
         */
        static bool NeedEscape(const std::string &v);

        static std::string Escape(const std::string &v);

        static std::string GetString(const Json::Value &json,
                                     const std::string &name, const std::string &default_value = "");

        static double GetDouble(const Json::Value &json,
                                const std::string &name, double default_value = 0);

        static int32_t GetInt32(const Json::Value &json,
                                const std::string &name, int32_t default_value = 0);

        static uint32_t GetUint32(const Json::Value &json,
                                  const std::string &name, uint32_t default_value = 0);

        static int64_t GetInt64(const Json::Value &json,
                                const std::string &name, int64_t default_value = 0);

        static uint64_t GetUint64(const Json::Value &json,
                                  const std::string &name, uint64_t default_value = 0);

        /**
         * @brief 从字符串解析Json对象
         * @param json 保存解析好的对象
         * @param v 要解析的字符串
         * @return
         */
        static bool FromString(Json::Value &json, const std::string &v);

        /**
         * @brief 将Json对象转换为字符串
         * @param json
         * @return
         */
        static std::string ToString(const Json::Value &json);
    };
}
#endif //YUECHUAN_JSON_UTIL_H
